{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import brnn_model\n",
    "import sys  \n",
    "import import_folders\n",
    "%matplotlib inline\n",
    "import pickle_lib as pkl\n",
    "import utilities_lib as ul\n",
    "from graph_lib import gl\n",
    "import numpy as np\n",
    "## Load the data once !!\n",
    "import mpmath as mpm\n",
    "# Import specific model libraries\n",
    "from sklearn.gaussian_process import GaussianProcessRegressor\n",
    "from sklearn.gaussian_process.kernels import RBF, ConstantKernel as C, WhiteKernel, ExpSineSquared\n",
    "from sklearn import preprocessing\n",
    "from scipy import spatial\n",
    "from matplotlib import pyplot as plt\n",
    "from matplotlib import cm as cm\n",
    "\n",
    "\n",
    "plt.close(\"all\") # Close all previous Windows"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "### Generation of the easy signal\n",
    "\n",
    "def mean_function(tgrid, f1 = 1, f2 = 5, a1 = 0.4, a2 = 0.2, \n",
    "                      phi2 = 2*np.pi/7, m = 0.1 ):\n",
    "    # This function outputs the function that we want to estimate.\n",
    "    \"\"\"\n",
    "    m = 0.1   # Slope of the linear trend\n",
    "    f1 = 1      # Frquency of first sinusoid\n",
    "    f2 = 5      # Frequency of second sinusoid\n",
    "    a1 = 0.4;   # Amplitud of the first sinuoid\n",
    "    a2 = 0.2    # Amplitud of the second sinusoid\n",
    "    phi2 = 2*np.pi/7    # Phase shifting of the second sinuoid\n",
    "    \n",
    "    \"\"\"\n",
    "    linear_trend = m*tgrid\n",
    "    sin1 = a1* np.cos(2*np.pi*f1*tgrid)\n",
    "    sin2 = a2*np.cos(2*np.pi*f2*tgrid + phi2)\n",
    "    \n",
    "    X = linear_trend + sin1 + sin2\n",
    "    X = X.reshape(X.size,1)\n",
    "\n",
    "    return X\n",
    "\n",
    "################  Covariance Matrix \"K\" #################################\n",
    " #We compute the distances among each pair of points in X_grid\n",
    "\n",
    "def get_Kernel (tgrid, kernel_type = \"1\", l = 0.001, sigma_noise = 1):\n",
    "    if (kernel_type == \"1\"):\n",
    "        # Hyperparameters\n",
    "        #l = 0.0001  # \n",
    "        # k = 1;   #\n",
    "        distances = spatial.distance.cdist(tgrid,tgrid,'euclidean')\n",
    "        K = np.exp(-np.power(distances,2)/(2*l))\n",
    "        K = K/ K[0,0] \n",
    "        K = K* sigma_noise\n",
    "        \n",
    "    elif (kernel_type == \"2\"):\n",
    "        \"\"\"\n",
    "        This is the most noisy possible kernel since each sample has its own noise\n",
    "        that is independent from the rest. Knowing the previous noise value\n",
    "        gives no information about this one.\n",
    "        \n",
    "        The Marginal error is the same, but if the samples are uncorrelated then the signal\n",
    "        if just completely noisy, no smoothness.\n",
    "        \n",
    "        \"\"\"\n",
    "        # Hyperparameters\n",
    "        # sigma_noise = 1\n",
    "        K = np.eye(N) * sigma_noise\n",
    "    \n",
    "    return K\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
<<<<<<< HEAD
   "execution_count": 27,
   "metadata": {
    "collapsed": false
   },
=======
   "execution_count": 3,
   "metadata": {},
>>>>>>> 3f4c287f35bd60b69f4fac644daa30e5913c543b
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/montoya/anaconda3/lib/python3.6/site-packages/matplotlib/axes/_axes.py:545: UserWarning: No labelled objects found. Use label='...' kwarg on individual plots.\n",
      "  warnings.warn(\"No labelled objects found. \"\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fc0279f4e48>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['Determinant by mpm:', mpf('7.3128891337494991e-178')]\n",
      "['Determinant by numpy:', 7.3129219013338985e-178]\n"
     ]
    }
   ],
   "source": [
    "\n",
    "#######################################################################\n",
    "############### Generate the signal ###################################\n",
    "#######################################################################\n",
    "\n",
    "t0 = 0          # Initial time         \n",
    "tf = 2        # Final time\n",
    "delta_t = 0.02   # Period of sampling\n",
    "\n",
    "# Create the t- values\n",
    "tgrid = np.linspace(t0,tf, int(float(tf-t0)/delta_t))\n",
    "tgrid = tgrid.reshape(tgrid.size,1)\n",
    "N = tgrid.size\n",
    "\n",
    "# Create the signal \n",
    "X = mean_function(tgrid, f1 = 1, f2 = 5, a1 = 0.4, a2 = 0.1, \n",
    "                      phi2 = 2*np.pi/7, m = 0.1 )\n",
    "\n",
    "plot_mean_signal = 1\n",
    "if (plot_mean_signal):\n",
    "    ## Plot the orginal function\n",
    "    gl.scatter(tgrid,X, lw = 1, alpha = 0.9, color = \"k\", nf = 1, \n",
    "               labels = [\"The true signal to estimate\", \"t\", \"X(t)\" ])\n",
    "    gl.plot(tgrid,X, lw = 2, color = \"k\", ls = \"--\",  legend = [\"True signal\"])\n",
    "\n",
    "\n",
    "###########################################################################\n",
    "############### Generate the structural noise #############################\n",
    "###########################################################################\n",
    "\n",
    "\"\"\" Now we generate the stocastic process that we add to X(t), \n",
    "    generating noisy signal Y(t) = X(t) + e(t)\n",
    "    \n",
    "    Where we will assume e(t) is Gaussian with mean 0 e(t) \\sim N(0,\\sigma_t)\n",
    "    So we have a Gaussian process, since each set of samples forms a jointly\n",
    "    gaussian distribution. The relation between the noises will be given by the\n",
    "    covariance matrix C. This will tell how big the noises are and how they relate\n",
    "    to each other.\n",
    "    \n",
    "    We will use a basic kernel for now\n",
    "\n",
    "\"\"\"\n",
    "\n",
    "K = get_Kernel(tgrid, kernel_type = \"1\", l = 0.01, sigma_noise = 0.5)\n",
    "\n",
    "############# Compute properties of the Kernel ########################\n",
    "N_det = 30 # Number of samples to compute the determinant from \n",
    "\n",
    "det_K2 = mpm.det(K[:N_det,:N_det]+ 1e-10*np.eye(N_det))\n",
    "det_K = np.linalg.det(K[:N_det,:N_det]+ 1e-10*np.eye(N_det))   # Determinant ! \"Noisiness of the kernel\"\n",
    "                           # The bigger the determinant, the more random ? \n",
    "print ([\"Determinant by mpm:\", det_K2])\n",
    "print ([\"Determinant by numpy:\", det_K])\n",
    "# Choleski factorization ! To sample from the Multivatiate Gaussian.\n",
    "# To ensure that it is positive definite we add a small noise to the diagonal\n",
    "L = np.linalg.cholesky(K+1e-10*np.eye(N))"
   ]
  },
  {
   "cell_type": "code",
<<<<<<< HEAD
   "execution_count": 28,
   "metadata": {
    "collapsed": false
   },
=======
   "execution_count": 4,
   "metadata": {},
>>>>>>> 3f4c287f35bd60b69f4fac644daa30e5913c543b
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fc021fc7908>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\nSUsLvvpUJT4tUQTBdwffv39/du3axfTp0wGbKD744APGjRvH+PHjWbt2LevXrwfsHerYsWM57bTT\n2L59u99ddyDGGK655hp+9rOfkZeXF/AYvmM357PPPuPKK68kNTWVzMxMzjrrLL788ksAJk6cyODB\ng0lJSSE3N5ctW7bQs2dPOnXqxG233cZrr71Gly5dAh7z2muvBeDss89m3759lJeXt+8DBH7wgx8A\nkJeXx5YtWwD7+T3wwAPk5uZSUFBAdXV14x10cy655BKys7Mbj3fw4EEuv/xysrOz+elPf8qaNWta\nfP/QoUPZtGkTd9xxB++99x49evQAICcnh6uvvprnn3+etACz5JWUlDBjxgzGjBnDgw8+6HeeCy64\ngI4dO5KRkUG/fv0aSxtuKSkpjVV011xzDZ999lnja+6quyVLlnDVVVcBcO211zbu99FHH3HLLbcA\nts2sZ8+eLFq0iBUrVjBhwgRyc3NZtGgRpaWbOOGEoWzbtom77/457733Ht2796CqCkaOzOH226/m\nzTcD/4xK+WiiCIKvjWLr1q0YYxrbKIwx/OIXv6CoqIiioiI2bNjAjTfeSGFhIQsXLmTJkiV8/fXX\njBs3jppArYsu9913H4MHD26sdgp0jFC6L3Z0FbdSU1Opra0lLS2NZcuWMWvWLN5++21mzpwZ9PHb\nen7fucF+fq+++mrj57dt2zZGjhzp976RI0eycuXKxsevv/46zz77LPsbhh/fc889TJ06ldWrV/PW\nW281fkZpaWnUu+ay8D3fu3dvvv76awoKCnjiiSe46aabAHjnnXe47bbbWLlyJRMmTDimveCOO+7g\n9ttvZ9WqVTz55JN+v4tAn21r3L2M3CWo9jDGMGfOnMbPb926ddx//3306tWbDz/8mgkTzuLxx5/g\nhhtuoq4O/vrXd7j++ttYvTrwz6iUT1zfRrRUPVRRcYTu3UOoe2qDLl268PDDDzN79mxuvfVWZsyY\nwT333MPVV19Nt27dKC0tJT09nYMHD9K7d2+6dOnC2rVrWbp0aYvHfeutt1i4cCGLFy9ufK6lY6Sn\np3P06NFjqjfOOOMMnnzySebMmcP+/fv55JNPePDBBxvbBJqqrKykqqqKGTNmMH36dIYOHXrMPmec\ncQYvvPAC99xzD4WFhWRkZDTehTene/fuVFS0vmLajBkzeOSRR3jkkUcQEb766ivGjRvnt8/ll1/O\n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\nAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fc02798bac8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_stochastic_process = 1\n",
    "if (plot_stochastic_process):\n",
    "    \n",
    "    ## Plot the covariance matrix ! \n",
    "    # Show the Nshow first samples\n",
    "    \n",
    "    Nshow = 20\n",
    "    fig = plt.figure()\n",
    "    ax1 = fig.add_subplot(111)\n",
    "    cmap = cm.get_cmap('jet', 30)\n",
    "    cax = ax1.imshow(K[0:Nshow,0:Nshow], interpolation=\"nearest\", cmap=cmap)\n",
    "    \n",
    "#    ax1.grid(True)\n",
    "    plt.title('Covariance matrix of Noise')\n",
    "#    labels=[str(x) for x in range(Nshow )]\n",
    "#    ax1.set_xticklabels(labels,fontsize=20)\n",
    "#    ax1.set_yticklabels(labels,fontsize=20)\n",
    "    # Add colorbar, make sure to specify tick locations to match desired ticklabels\n",
    "    fig.colorbar(cax)\n",
    "    plt.show()\n",
    "    \n",
    "    \n",
    "    ## Plot realizations of the Gaussian process\n",
    "    Nrealizations = 10\n",
    "    \n",
    "    flag = 1;\n",
    "    legend = [\"Realizations of the Gaussian process\"]\n",
    "    labels = [\"Gaussian Process\",\"t\", \"e(t)\"]\n",
    "    \n",
    "    for i in range(Nrealizations):\n",
    "        f_prime = np.random.randn(N,1)\n",
    "        error = L.dot(f_prime) \n",
    "        gl.plot(tgrid,error, lw = 3, color = \"b\", ls = \"-\", alpha = 0.5, \n",
    "                nf = flag, legend = legend)\n",
    "#        gl.scatter(tgrid,f_prime, lw = 1, alpha = 0.3, color = \"b\")\n",
    "        \n",
    "        if (flag == 1):\n",
    "            flag = 0\n",
    "            legend = []\n",
    "    \n",
    "    #Variance of each prediction\n",
    "    v = np.diagonal(K)\n",
    "    gl.fill_between(tgrid, -2*np.sqrt(v), 2*np.sqrt(v), lw = 3, alpha = 0.5, color = \"yellow\", legend = [\"95% confidence interval\"]);\n",
    "    gl.plot(tgrid,  2*np.sqrt(v), lw= 1, alpha =  0.5, color = \"yellow\", legend = [\"95% confidence interval\"]);\n",
    "    gl.plot(tgrid,  2*np.sqrt(v), lw= 1, alpha =  0.5, color = \"yellow\");"
   ]
  },
  {
   "cell_type": "code",
<<<<<<< HEAD
   "execution_count": 29,
   "metadata": {
    "collapsed": false
   },
=======
   "execution_count": 5,
   "metadata": {},
>>>>>>> 3f4c287f35bd60b69f4fac644daa30e5913c543b
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYoAAAEJCAYAAACKWmBmAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJztnXmUVOWZ8H9Pb0DT7A3NbgOCsojs4gI2uIA7RJNozKKT\nhMTozDczn8nnTE404zkzYyaOZ+KQz2Ucv8TESDIqcSOJGumgKLIoOwgttNALIGvTLN109/v98Vb1\nvdVdXV1ddevWre7nd06dfu+tuzx1+1Y9931WMcagKIqiKG2RlW4BFEVRlGCjikJRFEWJiSoKRVEU\nJSaqKBRFUZSYqKJQFEVRYqKKQlEURYmJKgpFURQlJqooFEVRlJgkrShEpLuIrBWRTSKyTUT+Kco2\nIiKPi0iZiGwWkWnJnldRFEXxhxwPjlEHzDfG1IpILvCeiPzBGLPGtc11wNjQ6xLgidDfmBQWFpri\n4uKEhDp16hQ9e/ZMaF8/CLJ8KltiBFk2CLZ8KltiJCvbhg0bDhtjBra7oTHGsxeQD3wEXNJi/VPA\nHa7lT4Ah7R1v+vTpJlFWrlyZ8L5+EGT5VLbECLJsxgRbPpUtMZKVDVhv4vht98RHISLZIrIROAS8\nZYz5sMUmw4D9ruWK0DpFURQl4IjxsCigiPQFlgN/bYzZ6lr/OvCIMea90PKfgf9jjFkf5RhLgCUA\nRUVF05ctW5aQLLW1tRQUFCS0rx8EWT6VLTGCLBsEWz6VLTGSlW3evHkbjDEz2t0wnmlHR17Ag8D9\nLdap6akFQZZPZUuMIMtmTLDlU9kSwy/TU9LObBEZCJwzxhwXkR7ANcBPWmz2KnCfiCzDOrFPGGOq\nEznfuXPnqKio4OzZszG369OnDzt27EjkFL4QZPlUtsQIomzdu3dn+PDh5ObmplsUJYPxIuppCPBL\nEcnGhtv+zhjzuoh8F8AY8ySwArgeKANOA3cnerKKigp69epFcXExItLmdidPnqRXr16JniblBFk+\nlS0xgiabMYYjR45QUVHBqFGj0i2OksEkrSiMMZuBqVHWP+kaG+DeZM8FcPbs2XaVhKIoICIMGDCA\nzz//PN2iKBlORmZmq5JQlPjQ74riBV6YnhRFUZQUYAx8/DEcOQIjR8KoUZCX578cGTmjSDfZ2dlM\nmTKFSZMmcdNNN3H8+PGEj1VcXMzhw4cBuOyyyxI6xr/8y79ELCd6nGSoq6vj6quvZsqUKfz2t7+N\neO/mm2/mueeea17+9re/zU9/+tPm5dtuu409e/YAkZ+lvr6euXPn0tDQkGLp4+M//uM/mj/HL37x\nC6qqqprfu/322ykrK0vp+aurq7nxxhsB2LhxIytWrGh+7/XXX+fBBx9M6fkV/9mwAV59FVavhhde\ngJ/8BJ57Dg4e9FcOVRQJ0KNHDzZu3MjWrVvp378/P//5zz057vvvv5/Qfi0VRaLHSYaPP/4YsD9g\nX/7ylyPee/zxx3nooYc4fvw477//Ph9++CF/93d/B8C2bdtobGxk9OjRQORnycvL46qrrmqleNJB\nQ0MDzz77LF/5yleA1orinnvu4Wc/+1m7x0m0JA3AY489xre//W2gtaK44YYbeO211zh9+nTCx1eC\nxalT8PbbkesaG2HPHvj97+1swy9UUSTJpZdeSmVlZfPyT3/6U2bOnMnkyZN56KGHmtcvWrSI6dOn\nM3HiRJ5++umoxwonzjz44INMmTKFKVOmMGzYMO6+++42j/HAAw9w5swZpkyZwp133hlxHGMM3//+\n95k0aRIXXXRR8w9uaWkpJSUl3HbbbVx44YXceeed4fwWHnjggWb577///lYyHj16lEWLFjF58mRm\nz57N5s2bOXToEF/96ldZt24dU6ZM4dNPP43Yp7i4mCVLlvCDH/yAe+65h6VLl5KTY62ezz//PLfc\nckubn2XRokU8//zzcf8/2uKuu+7innvuYfbs2YwePZrS0lL+6q/+ivHjx3PXXXe1+h8AvPjii83v\nvfPOO0ybNo2cnBxefPFF1q9fz5133smUKVM4c+YMc+bMobS0NOnZT2NjI9///veb/wdPPfVU83sv\nvfQSCxcupL6+ngcffJDf/va3zTM4EaGkpITXX389qfMrweHttyGcBdCrFxQVOe9VV4PrZyflZLSP\n4sc/bvu9uro8unVLzbHDNDY28uc//5lvfvObALz55pvs3r2btWvXYozh5ptvZtWqVcydO5dnn32W\n/v37c+bMGWbOnMm1117bZijlww8/zMMPP8zx48eZM2cO9913H0CrY9x666088sgjLF26lI0bN7Y6\nzssvv8zGjRvZtGkThw8fZubMmcydOxewM4Bt27YxdOhQLr/8clavXs348eNZvnw569ato3fv3lFN\nag899BBTp07l97//Pe+88w5f//rX2bhxI8888wyPPvpomz9U999/P2PGjGHOnDnNMgCsXr2aO+64\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fc021fc7048>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "###########################################################################\n",
    "############### Getting the combined noisy signal #########################\n",
    "###########################################################################\n",
    "plot_realizations_signal = 1\n",
    "if (plot_realizations_signal):\n",
    "    flag = 1;\n",
    "    legend = [\"Realizations of X(t) = mu(t) + e(t)\"]\n",
    "    for i in range(10):\n",
    "        f_prime = np.random.randn(N,1)\n",
    "        error = L.dot(f_prime)\n",
    "        f =  X + error\n",
    "                \n",
    "    #    gl.scatter(tgrid,f, lw = 1, alpha = 0.3, color = \"b\")\n",
    "        gl.plot(tgrid,f, lw = 3, color = \"b\", ls = \"-\", alpha = 0.5, nf = flag, legend = legend)\n",
    "        if (flag == 1):\n",
    "            flag = 0\n",
    "            legend = []\n",
    "    \n",
    "    \n",
    "    #Variance of each prediction\n",
    "    v = np.diagonal(K)\n",
    "    gl.fill_between(tgrid, X-2*np.sqrt(v), X+ 2*np.sqrt(v), lw = 3, alpha = 0.5, color = \"yellow\", legend = [\"95% confidence interval\"]);\n",
    "    gl.plot(tgrid, X+ 2*np.sqrt(v), lw= 1, alpha =  0.5, color = \"yellow\", legend = [\"95% confidence interval\"]);\n",
    "    gl.plot(tgrid, X- 2*np.sqrt(v), lw= 1, alpha =  0.5, color = \"yellow\");\n",
    "    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": false,
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/montoya/anaconda3/lib/python3.6/site-packages/matplotlib/axes/_axes.py:545: UserWarning: No labelled objects found. Use label='...' kwarg on individual plots.\n",
      "  warnings.warn(\"No labelled objects found. \"\n"
     ]
    },
    {
     "data": {
      "image/png": "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\nrkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fc021b65f98>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZQAAABgCAYAAAA6sYQbAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAECVJREFUeJzt3X2wXVV5x/HvrxBtSZiCBGMI4KUWiyBQIBMKglxHWi9h\nKHVqHV5U0tpaLXZ0RjsEae1MGYc4VgepgqUUKWpBW0CY8CZoIgUG5AYjhJfUmAYkRCLvSaDFwNM/\n1r7h5OS87H3Ofjkhv8/Mneyz9157PfuclbvuPs/aaysiMDMzG9avNR2AmZm9NrhDMTOzUrhDMTOz\nUrhDMTOzUrhDMTOzUrhDMTOzUrhDMTOzUrhDMTOzUjTaoUi6VNJ6SSu6bJekCyStknSfpMNbtk1I\nWpltW1hf1GZm1knTVyiXARM9tp8A7J/9fAS4CEDSTsBXs+0HAqdKOrDSSM3MrKedm6w8Im6TNNZj\nl5OByyPND3OXpN0kzQbGgFURsRpA0pXZvg/2qm/mzJkxNtarut42bdrE9OnTBy5fFcdVzCjGNYox\ngeMqahTjKiOmZcuWPRkRe/bbr9EOJYc5wM9bXj+Wreu0/sh+BxsbG2NycnLgYJYuXcr4+PhAZccW\nXg/AmkUndl2uOq6y681Tx4sd6ivrvSh6zKnlyyams+CmTUPFMGjd3eoYpm3ljWcQeeKqsm13qyvv\nZzhsPIN8tv3afJl15TnPYdsWgKRH8uw36h3K0CR9hPR1GbNmzWLp0qUDH2vjxo1DlQe2Kt9tuaii\ncZVV7yB1FF2uoq6NGzcCKiWGss6zjLaVt64iisRVRdvupuhnOGw8ZX3Oeeouu66y2lYejXYokiZI\nuZC9JS2MiEVtu8wEvinpWVKsBwGbgLXA6ZKOBF7O9vtqpzoi4mLgYoC5c+fGMD31UD39TemvhvHx\n8e7LVcdVcr2F6ii6XGFdM2bMIDWjIWIo+TyH/iuyovaVK64K23a3unJ/hsPGU9bnnKfuiuoq4wol\nr8aS8i2J9QXAKjon1s8FHgIOIyXwN0TEQ8A9pA7mDGAe8BRwXS2Bm5lZR01eocwDdgG+Q7rCeAE4\nV9ItABHxNeAGYD6pw9kDuCDbtlnS01lZAZdGxAO1n4GZmW3RZIcyB7g+Iv4cQNIHgSOzjgSAbHTX\nmZJ2ISXev9RS/gVgI+krr1/WFrWZmXW0vSTlTwLuiIinW9YdExFrJb0RuEXSwxFxW3tBJ+Xzx1Am\nJ+WLx+SkfH5Oyudf3lGS8muBfVpe752t6+QU4IrWFRGxNvt3vaRrSF+hbdOhOCmfI4YyOSk/0Hk6\nKZ+Tk/KF66ozKd9kh3IPcIik1cArwHTg+NYdJI0D12bb3iLptyPiHyRNB/4AWEQ6h52Bv6wxdjMz\na9NkhxLZv2Lq2hVC0kdhS1Ie4H+AhyPilJays4ErgdXA/5GS+49WHrGZmXXV9Civ+yLiPQCSzgZO\njojz2vZ7rK0zAdgTWNpelj5Tr5iZWXWaHuWVZ/qUoyXdR8qvfDobHpx76hUn5fPHUCYn5YvH5KR8\nfk7K51/eUZLyedwL7BsRGyXNB75Lmnk4Nyflc8RQJiflBzpPJ+VzclK+cF07SlJ+LfC7klYCO5Fu\nXvxh2z4nAWdJErAB2EXSTApMvWJmZvVobOoVYBlwKPAX2b/HAe0P2noOOC4iDga+Teo4nsJTr5iZ\njZy+VyiS9ibdB3IssBfwIukX//XAjRHxyoB1HwHcB1xCukK5DXi7pDmwZZTXGPB5SZuBl4Dns7vn\nPfWKmdmI6dmhSPo6KQG+GPg8sB74deCtpCctnpPNErzNDYU5zAF+3GHqlS2jvCLiK8BXsu2fBg5o\nKe+pV8zMRki/K5QvRkSn572vAK6W9Dpg3/LD2pqkdwEfBo5pWe2pVzIe5VXsmB7llZ9HeQ12XI/y\n6mCqM5H0iYj4cuu2lnWrBqy7b1I+S8Z/E3g/8DPgzaR8CcDBkn6QlV2Dp14ZPIYyeZTXQOfpUV45\neZRX4brqHOWVNyl/Rod1C4asO09S/kPAH2XbFgAXAUjaFbgQOAGYCxwFPD9kPGZmNoR+OZRTgdOA\n/SS1jqLaFXi6c6nc8iTlF5KmaLkwK3OApNnA0aQRX9dk53A76XkpZmbWEKVBU102Sm8G9gPOI/1y\nn7KBNG3K5oErlt4HTHRIyn+8ZZ/FwKKIuD17/X3gLNLor55lO5k7d25MTk4OGvKrl45S333NzEZG\nj9/zeUhaFhFz++3XLyn/aEQ8QvpKqVtFil69UsOqSMqPlxOamVktRiIpDyyRdBVwbURsmc03G911\nDCm3soT0vPei8jwPpds+03KUBapJyo+dtRiANYtOZGzh9VuWga1et2/rp1vZfsuXTUxnwU2b+u5f\ndr2dzrnVMMnAvHUPIm9cZdfbq468n2ET7avJtt2trmETzVW1rzxx1dGutqlrRKZemQD+DLhC0n7A\ns8BvkJL53wPOj4gfF61U0huAc4HjJP0X8MekmydPa9lnH9KV0emS/ha4GXguItZJ+hjwbkkPAr8i\n5XROKhqHmZmVp1+HcjVwZkRcKGkaKRH+YkQ8O2S9C4FbSc+I/zdgJfCPEfHA1PNQSA/WWkC6/+QE\n4EzgA9m2V0hXRe8EXg/8q++UNzNrVr8O5evAzZIuA74QEetKqvdkYDy72jiE9GyTz8FWD9YCWEea\ncRhJ15KukKY8PJWUNzOz5vW7sfE/JN0I/B0wKekbpKuDqe1fGrDeWS2d0y+AWb12ljQGHAbc3bL6\nryV9CJgEPhURzwwYi5mZlSDP9PUvkW5JfT0pV5FrMkhJtwJv6rDpnNYXERGSuo4SkzQDuAr4ZERM\n3bx4ESkHE9m/XyTlejqVr2zqlV5TKmyPU4kMO41E+2tPVZNfnVOJlPk511l3e5sv47Mou32VMVVN\nFUZilJekCVKe4zrg8Ih4Ie+BI+L4Hsf9paQfkmYvfhx4sst+a0g3LD4PfIaU04GUiL+JdD/KL+hx\nU2MlU6/0mlJhe5xKZNhpJLrUMdRInB1sqppaphIp83Ous+4dZaqaKlR9/Db9pl45B/iTiFhYpDPJ\n4RnghYjYnzRr8DZ33WfzeM0EvhURc9puqjkX+H5W/jmm/rQzM7PG9OxQIuLYikZP7Q7MkPRTYDrw\nBgBJe0m6IdvnHdm2YyUtz37mZ9s+AJyRPWt+WvZjZmYNauoRwHtmVxdTVyLPAETE48D8bPn27Cuv\nX5GeefLPETHV2UREvK29vJmZNaeyDqWkpHzfZ57kSOo7KZ8zBifli8VQJifliy07KV/MSCTlhzFs\nUl7S7wDf1qsTMR4AfIo0K/FmSeuAJ0jnsKlHHE7K94vBSfliMZTJSfmBztNJ+ZxqTso39ZXXlqR8\ndp9Lp6nwHwOOjYgN2fNPniINH4Z0Z/2zEXGipIVkORgzM2tO3gdslS1PUn4WcLuknwD3A+si4vJs\n2+3AW7PyxwOLao3ezMy2McpJ+dWkJzki6VKyKVgyLwKvIw0ZfpR0g6OZmTVo1JPyU1Pl/yFwdstq\n3ynvpPzAx3RSfrjjOynfnZPyFemTlH9C0uxscsjZwPoehzoBuDcinmg59pZlSf8CLO4Rh5Py/WJw\nUr5YDGVyUn6g83RSPqcRu1O+Kg8DyyW9QppS5dpOO2VTv3wDODRLvk+tf5ukW7Icys2kJL2ZmTWo\nqQ7lPGA18L/APLKkemtSXtJOwIWkmxoPAk6VdGBW/j+Bg0m5lJdJ09ybmVmDGulQIuKuiDgK+BHp\nAV5PZ+sfj4ip6VXmAT+NiN0j4kngStJzVCB9VXdYRBwCvBv4/XrPwMzM2jV1hZLHHODnLa8fy9ZB\nweepmJlZ9RoZ5RURHXMmg/DUKx7lVZRHeQ13fI/y6m5HH+VFRDT2AywF5nbZdhRwc8vrs4Gzs+WV\nwOxseTawMk99RxxxRAxjyZIlQ5WviuMqZhTjGsWYIhxXUaMYVxkxAZOR43dsUzc25nEPsL+k/YC1\nwCnAadm264AzSMn8M+gySqzdsmXLnpT0yBAxzaTLw8Aa5riKGcW4RjEmcFxFjWJcZcT05jw7KXU+\n9ZL0XuCfgD2BZ4HlEfEeSXsBl0SWmM+ef3I+sBNwaUR8Llu/B/AdYF/gEeD9kSX2K457MrZ+0NdI\ncFzFjGJcoxgTOK6iRjGuOmNq5AolIq4BrumwfsvUK9nrG4AbOuz3FGl0l5mZjYhRHuVlZmbbEXco\nxVzcdABdOK5iRjGuUYwJHFdRoxhXbTE1kkMxM7PXHl+hmJlZKdyhZCRNSFopaVXrRJQt2yXpgmz7\nfZIOz1u24rhOz+K5X9Kdkg5t2bYmW79c0mSNMY1Lei6rd7mkz+YtW3Fcf9MS0wpJL0uaerhbVe/V\npZLWS1rRZXtT7apfXLW3q5xxNdW2+sXVRNvaR9ISSQ9KekDSJzrsU2/7ynOzymv9hzQs+WfAb5Ee\n3PUT4MC2feYDN5JuZ/494O68ZSuO62hg92z5hKm4stdrgJkNvFfjwOJBylYZV9v+JwE/qPK9yo77\nTuBwYEWX7bW3q5xx1dquCsRVe9vKE1dDbWs2cHi2vCvw303/3vIVSjIPWBURqyPiJbaeiHLKycDl\nkdwF7Kb0LJc8ZSuLKyLujIhnspd3AXuXVPfAMVVUtuxjnwpcUVLdXUXEbUCve6SaaFd942qgXeWK\nq4dG3682dbWtdRFxb7a8AXiIV+c7nFJr+3KHkvSaiLLfPnnKVhlXqw+T/hqZEsCtkpYpzWlWZ0xH\nZ5fYN0o6qGDZKuNC0i7ABHBVy+oq3qs8mmhXRdXRroqou23l1lTbkjQGHAbc3bap1vY1ylOvWAGS\n3kX6j39My+pjImKtpDcCt0h6OPtLq2r3AvtGxEal2Q6+C+xfQ715nQTcEVvPrtDUezXSRqxdgdvW\nNiTNIHVgn4yI58s67iB8hZKsBfZpeb13ti7PPnnKVhkXkg4BLgFOjjSLAAARsTb7dz1pZoJ5dcQU\nEc9HxMZs+QZgmqSZec+nqrhanELbVxIVvVd5NNGucqm5XeXSUNsqota2JWkaqTP5VkRc3WGXettX\n2Ymi7fGHdKW2GtiPVxNUB7XtcyJbJ7d+lLdsxXHtC6wCjm5bPx3YtWX5TmCippjexKv3OM0DHs3e\nt0bfq2y/3yR9Fz696veq5fhjdE8y196ucsZVa7sqEFftbStPXE20rey8LwfO77FPre3LX3kBEbFZ\n0sdJz6efmojyAUkfzbZ/jTSn2HzSf7IXgD/tVbbGuD4L7AFcKAlgc6SJ4GYB12Trdgb+PSJuqimm\n9wEfk7SZ9JjmUyK14qbfK4D3At+LiE0txSt5rwAkXUEamTRT0mPA3wPTWmKqvV3ljKvWdlUgrtrb\nVs64oOa2BbwD+CBwv6Tl2brPkP4YaKR9+U55MzMrhXMoZmZWCncoZmZWCncoZmZWCncoZmZWCnco\nZmZWCncoZg2TtJukv2o6DrNhuUMxa95ugDsU2+65QzFr3iLgLdnzMr7QdDBmg/KNjWYNy2aKXRwR\nb284FLOh+ArFzMxK4Q7FzMxK4Q7FrHkbSI9wNduuuUMxa1ikZ43cIWmFk/K2PXNS3szMSuErFDMz\nK4U7FDMzK4U7FDMzK4U7FDMzK4U7FDMzK4U7FDMzK4U7FDMzK4U7FDMzK8X/A1AkUrwpZq8WAAAA\nAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fc021ae95f8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZUAAABfCAYAAAAgX1pdAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJztnX+YHFWZ7z9vd09men72ZJJNAkMyySirIk6WX15RY2AV\nEIKs85gsuBhAo0FXlrtc5Lp77w0ad59H2Ud28S4sYXNZCbiywQyri6AsSsiyriJiAgEEkjDA8Jsk\nM5nM7x/v/eNU1dR0+kd1T3V3TTif5+lnqqvqVL1ddaZOnfM97/uKqmKxWCwWSxjEKm2AxWKxWI4e\nbKNisVgsltCwjYrFYrFYQsM2KhaLxWIJDduoWCwWiyU0bKNisVgsltCwjYrFMgNE5D4RuaRM57pZ\nRP5PGc7zNRG5o9TnsRydJCptgMVSSUSkG6gFlqrqgLNuHXCxqq7MV15VP15SA6ef6/JynctiKRbb\nU7FYIA5cWWkjLJajAduoWCzwN8DVIpLKtFFETheRX4tIn/P3dN+27U7PBhF5h4g85Oz3loj8i7P+\nRhH5dtoxfyQif57hXCIifysib4jIIRF5QkTe62z7roj8lW/fa0TkVRF5RUTWiYiKyDt8+94oIj8W\nkX4R+ZWItPvK3iAiLznn+I2IfHhGV9BicbCNisUCjwLbgavTN4jIXODHwHeAFuB64Mci0pLhON8A\n7geagVbg/zrrbwMuEpGYc8x5wEeBf85wjLOAFcDxQBOwBtifwa5zgKuc47wDWJnhWBcCX3fs2QP8\ntW/br4HlwFzHjrtEpCbDMSyWgrCNisVi2ABcISLz09afBzynqrer6riqfh/4HXB+hmOMAUuAY1R1\nWFUfBlDVR4A+4A+d/S4Etqvq61mO0QC8CxBVfVpVX82w3xrgn1T1SVUdBL6WYZ+7VfURVR0Hvodp\nRHBsukNV9zu/6dtANfD7GY5hsRSEbVQsFkBVdwP3AF9N23QM8ELauheAYzMc5hpAgEdE5EkR+axv\n223Axc7yxcDtWez4OfD3wI3AGyJyi4g0Ztj1GOAl3/eXMuzzmm95EKh3v4jI1SLytDNU14vpFc3L\nZJPFUgi2UbFYprgW+DzTG4xXML0PP4uBl9MLq+prqvp5VT0GWA/c5GocwB3ABSLSAbwb+NdsRqjq\nd1T1ZOA9mGGwr2TY7VXMEJvLcbl+mB9HP7kG09tpVtUUpiclQY9hsWTDNioWi4Oq7gH+Bfgz3+p7\ngeNF5NMikhCRP8Y87O9JLy8iq0XEfdAfBBSYdI7dg9Exbge2qepQJhtE5FQReb+IVAEDwLB7jDS2\nApeJyLtFpBYoxH+lARgH3gQSIrIByNQbslgKxjYqFst0NgJ17hdV3Q+sAv4HRjC/Blilqm9lKHsq\n8CsROQz8CLhSVff5tt8GnEiWoS+HRuAfMY3SC845/yZ9J1W9DzN54EGMCP9LZ9NI/p/IT4GfAM86\n5xgm8/CZxVIwYpN0WSzlQURWYIbBlmjI/3gi8m5gN1DtCPMWS0WwPRWLpQw4w1lXApvDalBE5JMi\nUi0izcC3gH+zDYql0thGxWIpMU4vohdYBPxdiIdeD7wB7AUmgC+GeGyLpSgqPvwlIrdixqzfUNX3\nZti+Evgh8LyzqktVNzrbzgFuwITZ2Kyq3yyL0RaLxWLJSBQalRXAYWBLjkblalVdlbY+jhEaPwa4\nM2suUtWnSm60xWKxWDJS8eEvVd0BHCii6GnAHlXdp6qjwJ3ABaEaZ7FYLJaCqHijEpDTReRxJ3fF\nCc66Y5k+DbKHzF7OFovFYikTgfKpOIHwOjChIYaA3ar6RikN8/EYsFhVD4vIuRhP5HcWcgAR+QLw\nBYBkMnnycccFdj4+gsnJSWKx6LXF1q7CiKJdUbQJZrdd/f39HDhwgLGxMW/fyclJqqqqmDt3Lg0N\nDWW3qRKEYdezzz77lqqmx8Y7ElXN+gHagVuAfRiHqTuAHwCPY5ytLgNiuY6R7wPcCrwFDGfZ/ifO\n+Z4AfoEJjzEP+ACmgXsC2InpqfxFvvOdfPLJOhMefPDBGZUvFdauwoiiXVG0SXX22rVt2zadN2+e\ntrS0aFNTkzqpATSVSml9fb3G43Gtra3Vjo4O3bZtW1lsqhRh2AU8qgGe6fmarr9yGpJ2VT1bVS9W\n1U+p6vuAT2CC0H0mSCuXg+8CudKx9gEfUdUTMSE05mG8jH+N6WldgtFX9mO8mC0Wy9uYrq4uli9f\nzurVqzl48CCTk5MMDAx42w8dOsTAwAATExOMjIywd+9e1qxZQ11dHcuXL6erq6uC1s9+cg5/qepF\nACJSzZHhH/pUNYw591/EhASvFpEeTFC/Kuf8NwNtwLdEZBwYBQ45rea4iBzAxEAS4FZVfTIEeywW\nyyylq6uL9evXe2/Nk5OT9PX1MTk5iYggIt5yLBZjYmKCgYEBVJWRkRF6enpYv349AJ2dnRX+NbOT\noINs/xVwXcE4DddpwJOq2qqq/09Vb3YaFFT171X1BFXtwPRUfugrPoiZjtyLCY5nsVh8uG/tqVSK\ntrY2li5desTy0fB2nql3Eo/HERF3GB0g63IsFmNycpKJiQkOHjzI6tWrj6rrsmrVqrL9npx+KiKy\nEDOj6g7g00yFxm4EblbVd4VihEgbcI9m8FPx7XMGcBPwITVB/hCRY1X1ZRH5PeDfgSvUTFFOL+sJ\n9QsWLDj5zjvvLNrWw4cPU19fn3/HMmPtKowo2hW2TTt27OD6669HVZmYmGBwcBBVpbq6mtHRUVSV\n+vp6YrEYIsJVV13FihUrSm5XWLh2+X9nf38/qoqIUF1dzcjIiNd4uA2M24D4GxyRqaj/7rrGxsac\n1yWXTZVkx44dbNmyhZdeeonx8XGqq6upqalhYmKi4N/j54wzzviNqp6Sd8dcggtGr3gQ6Ad+7iw/\niOktdAYRbfJ9yC/UCyZr3Rgm495Jvm3nAM9gorQ+gHGStEJ9hLB2BScsm7Zt26YdHR0ai8U0Ho9r\nc3OzJhIJT6gGvOVEIqGpVErj8bjGYrGMonUUr5XqlF0dHR3a0tKiixYtmvY703/bkiVLtK2tTZPJ\npMbjcW1oaNBEIqGAd60KuS65bCo37j3P9tsaGhp00aJF2tLSoh0dHUWdgzCEelW9TVXPAC5V1TNV\n9Qznc4GqhtWP+i65hfq1wB8BHwEuBf4BQEQaMD2XjwOnYGaDHQrJJotlVuJqCj09PV4Ppa+vj/Fx\nE2fS/0YuIoyPj3uaw+TkpKcpzIZhnx07drB8+XJ27dpFb28vw8PD03oJ4+PjxONxmpubueuuu+ju\n7ub5559ncHCQrVu3smzZMqqqqojH49TV1TE5Oen1cubMmTPtukRRzHeHtmpra1mzZg379u1jbGzM\n04nGx8e93tjg4CAAVVVVdHd3l9SunI2KiFwsIqKq27JsbxeRD83Qhi8C/4Qj1IvI50TkchG53Nn+\nVUyyo5uAm4EOEVkEnIWZCXY38J/Aw0DLDG2xWGY1GzduRFWZM2dOQZoCQCKRYM6cOagqGzduLJvN\nxdDV1cX1119PT08PiUTCazxFhKamJmKxGLFYjNbWVjZt2nSE6N7Z2cnOnTunNTAiQjwep6mpidHR\nUW/fWCwWmdlihTQkLu7kBICxsTHa2tpKamM+ob4F2Ckit4rIn4rIGhFZKyIbReQh4Drg9ZkYoHmE\nekwE1nNUdbmqLsc0IMdihsW2qmqHqp6A0X2sR73lbYn7sMn21u6ntrZ22nf37byhoYGhoSH6+vrY\ntWtXZN7IM+FvPOvr670H56FDh6b1Tnbu3Jl3FpfbwNx11100Nzd7s8Lc6+L27vyzxbI1MDt2HCHp\nzphiGxIXVz8aHR1FRNiwYUPoNvrJG1DSCdx4JvBBTOjuIeBp4D5VfXHGBphIwzdi8m1fq2mRhkXk\nKcwU4wHMFOgTMFOQ52J6ON2YsN+NwL2q+uUM57BCfYWwdgWnWJv8QrX7wBMR6uvrpw19zJ8/HxGh\nv7/fexC/8YYJjFFXV+eVV0fMdvf50pe+xFlnnRXqby0WV4Teu3cvsViMuro65syZw8jICENDQ0xM\nTNDe3s7atWuLEqPd4z//vAmKXldXx+HDh70Gxn1eust+8b++vp7R0VFSqdS0azyT5QMHDnhi++jo\nqHdv0+3IZtOcOXMYHR2lqqqK1tbWoq8LhCTUl/qDCVm/F/gw8CSwC3hP2j6bMNGHAc7HNC6LmPKo\nn+ds+wusR33ksHYFp1ib/EJ1KpXyxPh4PK4tLS06b968rCKz3+vcL+w2Nzd7wm57e/sMflV4BLG1\nWBE66LnwTXJwl2OxmOepLyIaj8enefDX1tYWveyeM9e53WX3nmeKFhAlj3oAROR4EfmZiOx2vr9P\nRP53kLJ5OA0zc+sljG6SKdLwj4C1YvpzX8bkXXmVKY/6xSIyB7gQ61FvmSHZ/DqiPBTU3d1NVVUV\nAMlkkqamJk9nyKYpuHR2drJp0yZaW1s9YbupqYmamhrACLuvvfZa2X5LLnINeYU9tOO/Ln4xP5FI\neL0BF1UlHo97PZp0D363p1jMcvrUZzhyaMu1LR6PU11dTXt7O1u3bmVgYCDQ8F/oBGl5gIcwDcBv\nfet2Bymb57ifwvRUXsVMGT4A/Ay4HLjc2Ucww2P7gHHgTF/514BhjLf/3UHOaXsq5WU22JVpOma5\nYkVlsykImaYOL1q0qOi3dn+Px+31FDqltpQ0NTXpwoULPfvq6+u9XkSp7cs3Zbe5udnrLfinNft7\nEmEtk6NHko1y9lQCJekSkV+r6qki8ltV/QNn3U41wnnRiMinMCL8Ouf7Z4D3a2Zd5I+Bi1X1fN86\n6/zoYO0qjEyOc349wn0LTn8j9WsNxTqR5bMpCNkcG4M4MxZ6TPctuBS/Oahd6TqHO0ttfHyc+fPn\ns3nz5rLb43cuTCaT9Pb2Mjk5SUNDA4ODg4H0j3zLLm7dK1YjCeP/MFRNBbgPE7H4MZ3qYdwXpGye\n434AeJQpB8afkKaLACsxQSV7MaL8Bt826/zoYO0qjK9//etHvOW7b5fZxqz9Y+eleIMv5FqVqleR\nqffjnidMzaIQe7JFGm5sbMypF5XLvo6ODm1qatIlS5ZobW3tEbbORFMJq5dczp5K0If/MuehPYgJ\nPf8w0BakbJ7jzsEMe60A6jDC+/lp+6x0GpsDQJ1vfQNmSGwZkMII+F/Id07bqJSXKNq1bds2bWpq\n0paWFq8B8XtUZxNF/Q2Luz6fEF4IQa6V+xDDGQLxD3ktXLhQm5qaZmyH6vShppaWFk2lUmUbavKT\nq/Fsb2+v+JBcOu7LitvItLW1zXg5jOtdzkYlUJIuVd0HfFRE6jD5U/qDlAvAyZhcKZsxM8F2AO8V\nkWOd87q+KguB+1V1wFfW7/yYwDo/WgKS7iDo+iS4pA97ubGi3GEld19XDO/v72f16tWceOKJbNiw\noWTCqD8CbyKR8LzhAWpqakJ1bGtra6Onp8ebrutONY7H42WJ5NvV1cXGjRvZtWsX8XicxsZGampq\nSCaT1NTUMDQ0xObNm1m5cmVJzl8sK1asKLkfSNQJOvvrShFpxPRU/lZEHhORMCauH4sR/49X1XYc\nB0ad7vwIsBh4j0xPJ2ydHy0F4XcQPHz48BEOgpOTk55+kEwmWbx4MUuWLKG6ujpQKI9Shzgp5+yn\nDRs2eA5zQ0ND3ph+Y2Njyb3u/aFm/N7yw8PDQHm8wi3FE6inAnxWVW8QkbMxvYHPALcD95fMsilC\nTSe8YMECtm/fXrQxhw8fnlF5mBL6XnvttWkOTwsXLizaOSkMu0pBVOzyi9Bu76S3t5f6+nrq6uoY\nHBxERFiwYEHGe+Des4GBAUTEK+M2MPF4HDC/96KLLqKqqqrg+5ntWmVz+Kurq/Mc/lKpFGvXrmXu\n3LmhXO+5c+dyxRVXsGXLFvbv3++dNxaLeRGO9+zZU5J7e80113hidE1NDQMDA15eFFf87uzsjEzd\n8hNFm6DMdgUZIwMed/7eAHzSWf5tkLJ5jhtEqD+q0gmXKsVpFLUL1ejYNRMHQT/+++fXY5qbm6cd\nd+HChQXrLZmuVTkd/rLR3t5e1qnG6VOHs+k5UalbfqJok2q00gm7/EZE7gfOBX4qJkLwZNEtme+4\nQAfweefvR4DdafscVemE/UMYuVKczqZosVEmU0ysZDLpObIFcRD043eKc3sorrOg6/yWSCQQkVAS\nPpVzyCsba9eu9YbCBgcHvSG/xsbGUOupe6/6+/t58803veEu16Gzo6OjMs58loII2qh8DhMt+FRV\nHcTM2roshPP7hfrHmRLq/VGK24CHRWQXcDFOOmFVHcfMCNuKiUW2VSOcTjjTw21iYgKYHkXUFYVn\nS7TYKJNrbL66urroB1WmAISq6g3N+AMzFhs6PVtjWIi3fFisWLHCa0j7+/uJxWKkUimSyWRo9dR/\nrxoaGpicnKS3t5ehoaGyNZ6WcMgX+t7N7Og6OS4TkZOAJQTXY3KRV6jXoyCdcLaHWyxmLr/6Zh6p\nM+Y/W6LFhklYIVIypZZNf8sfGxub8YPK32sZGhqiurqa+vp6r9fiEjR0upsfxB+NNr0xrNRbu9uQ\nNjQ0MH/+fC+My0zraaZ7VVtb64WvP3ToUNkaT0s45EsnfIuqfkFEHsywWVX1zBmdvDCP+lmbTnjd\nunW8+eabVFVVTZue6djmzaxxp7L606AG9eCOuud6NjJ5J8disWke4uPj44G9iLOllnUj9rrC9tKl\nS7n00ktD9Q7Pdm6/d767zr23roe0e//To9EWUxfCxn8Ps9XlYmzLda/cHtDIyAj33HNPXruiQhRt\nggh61JfqQzChftamE87mqOYXHvOlOA0qyM4mgTBfHCV/WlfX2ZAM8Y4yOYtlS6GbSCSmXcdSXa9M\nHun5PPUxwVQzRqN109pWwvHQJT1OWq6JA/X19VpTU5PTaS9fuuP0exXErqgQRZtUI+j8KCJVmAyN\n7uvHdmCTqo4FKZ8DV6j/Q2f5LUzwSD/+dMKTmHTC75epdMIfxWgrL2P0lUiQy1EtmUwSj8dpbW1l\n586d08pkcviC8qQBLSXub3v22WcZHR2ltrZ2WqIh/5u8u+x/w/cnSFKnx/HiiyadTzKZ9JbV6QH2\n9fV5TnKA19sp9dh8Z2cnnZ2d0+5/PB5nfHzc0178dsKUjpa+3hX7s9WXSuAOQW3cuJH9+/dPq6dD\nQ0Pe/UmlUt4wX3V1tZfL5fXXX/fuv3uvK3WvLKUhqFD/DxhR/Sbnc7KzbqYEEepnZTrhYmbtuOPW\nHR0dpFIpr0GB2e3w5deUCslY51+f/hD2f/eHCnePoaqMjo4GSi1bCgoNne633cX14o/aAzZbPfXP\nfhseHvZ0JPcF4IUXXmBkZMS7//4IBZW8V5ZwCdqonKqql6jqz53PZcCpIZw/iEf9rEwnPJMcF35v\nZnXGm3t7e3nuuedmlWjf1dXFunXrpomw6ZFbIXPqUxe3AQnyEPYvA15+kEJSy4ZJpjzo2RqY2tpa\n78UjPT9GVB+w6fXUP/vNnaiQ/gLg75H611f6XlnCI2jo+8eA1aq61/m+DPiBqp5U9IlF5gIPYqYM\nPwKsAVbhE+pF5Djgt0A/ZqbXLcAngP8JXAOcBzznHPIBoEYrnE44W5huML2NoGG6s4XXdt/u08XQ\nUgiE2Tz/06MAnHLKKTz66KPT9vOnQR0eHi5ItK6qqiKVSuVMp5p+HMAbJksmk17vZenSpRmF/UoK\nqtnu7eDgYGipX8Mk17Xy15GxsTHi8Ti1tbUcOHBg2v2FzGHd3cgEkP1eFWNXpYiiTRBBoR6jebyI\n0VIewoSgPyNI2RzHvA4zpPVTzBDXt0hLCYxJG7wNuAgTlfhZ4Hln/WbgGd++FU8nnMtbvthotulR\nWrMJmGEJhPkSVmUKyy0iR+znF5yDCu/5hN2gNgW51lERVP2h06MYdVc1+LXKJuLnuv8zifIclXvo\nJ4o2qUYw9L05HtXA+5xPddByOY73DNCKCV9/mvN9F3BC2n7nYfK5CEZz+Z2zfiPGi34pxhnziLKZ\nPqVsVEqR4yI9ZEW2EOdhVJogDwXSZia5+7nLmfZLDxc/k3A06fkrig0VHsV//ijapFrcjMdyZNGM\n4vWKok2qEZz95XAyZqgqASx3urJbCiifzgJV7RGRL2P0kHZMAq4nXZFeja5yLyY8TDemh/Ixp/wk\nJr3w7zDphG/QCnnUBwnTXeysHX8IcpewRXvX/ieeeAIRobGxcZr24Z+Npb7hC39EAHfZ/e7uB+bF\npampyfNFaG9vLzpEvDu7yhJN/PfHrVfd3d0sXrwYEeHgwYMzuv+W6BNUU7kd89DfCbhPD1XVP8tT\n7gFMLpR0/hdwm6qmfPseVNXmLMepxwy7/bWqdjnrFmCmICvwDWCRqn42S/mSaSrZ0tG6DlyF6CiZ\n8B8/kUhkHXcvdsw0qMMeHDkm7kYEmJiY8KL0ur/fRbVyTnu5iOLYdxRtAmtXIUTRJoimpvI0TgMU\n1gcjsD/k/5tlv26MUP8yvu4XMBfjRf8c8B/AU0HOG8bwl38IpqamRhsaGmYc/TYXmYYU0qPgFtu9\n9Q/Z+Yev/GPffue9oJqKuy0Wi814mKMURHGYIoo2qVq7CiGKNqlGM0rxbjL3OGbCQWBQVd+Jmdl1\nIH0HMa+884DvqeqxOr2V/AbwM6d8H0ZzKRlujKKzzz7bi8uUTCYZGRnxEj6VKuCfOzX1+OOPJ5VK\neW/9MwnmlylgYZCEVVVVVd6yOkNZV199NcuWLQM4Ytu1117LwMCAnSJqsbxNCKqpzAOeEpFHMPoF\nAKr6iRmcuxkYEZHngFcxPQ9E5Bhgs6qeC3wQk7v+wyLiihJ/qar3YiIWvyIin3bKV83Alpz4vaMn\nJiY8561EIuF5S/f393s6Sqm8n7u7u0kmk9PWFeNpn83bv6mpqWjt47rrrsu4PooJiywWS+kI2qh8\nrQTnnu/0MtweyUEAVX0FI8yjqg+LSDcm7tcEJjTMvU55VdV3p5cvBX7veL/O4Pps9PX1MT4+jqqG\nEv02G+mi/dDQkNcArFu3juuuuy5nA5BJkHftd739U6kUzc3NkXS2s1gs0SeQUJ/3ICL/paofyLB+\nxkK9ZIlELCK9Qco722Yk1K9atYrq6mpEhN7e3mli9Ny5c73YVcWkkC0Ev6g+MTExLZKvK5xnE8KD\nRu9tb28P1f6jWbgMmyjaBNauQoiiTRBBoT7fhyJSCxNAqAd+HzPjzP2MAD90tr2FGfbaidF8eoKc\ntxih3i9mu8I0IYvxQckU4dV1iMzkFBlWRNhiOZqFy7CJok2q1q5CiKJNqtH1U8nZNhVRxhPqReQ+\nMgj1mLzzH1bVfjFRifdjPOzBOEv2qup5IvJVHE2mFGzYsIH169czOjo6bejJjctUzjn3rh+Am3nP\n7TGNjIwwPDzM/v37aWtrsxFhLRZLRQg6+6sUNAP1jlBfh0+oFxFXN1nAVCrhJ4BXdcrh8mHgeKf8\nR4FvlspQf8TZkZER2tvb2bp1a0VnNbW1tTE2ZjIPuCHH3bhgNiKsxWKpFDl7KiKyWFVfzLLtw6r6\nH+7XIs4dRKjfh8m3gojcCjzmKz+ECc/Sh4lLNnNxKAduD2H79u2sXLmylKcKhL/35IYcdxsONzdH\nuvOiiz8irG1MLBZLmORLJ7wPk8Pk26o64axbAHwbeJc6oo2IvFdVd2coH5ZH/RzgFUxsr9d9dlTc\no76SuBFi9+7dSywWo66uzmtg0r3fYWYRYYslStfLTxTtiqJNYO0qhCjaBBES6jFDVJswQ09nAlcC\nLwB/CsSCiDY5jv0MpiEAE9PrmRz7XgDcn2N7G7A7yHnLmU64XHR0dGhjY2NOr/hKTCpQjeb1Uo2m\nXVG0SdXaVQhRtEk1Qh71qnpQVddjwsw/AHwF+KCq3qiqkwU1c0fyI+ASZ/kS4Ic59r0I+L5/hZjs\njy6fxMwAe1viT5ZUV1fnrW9sbJwVyZ4sFsvRQ85GRURSIrIJuAw4B/gBcJ+InBnCub8JfCxdaE8T\n6hGROkxk4vR0h9eJyBMi8jhwBvDnIdg0K+ns7OSqq66itbUVODJUSqUnFVgslrcPQTSVm4C/U9Vx\nZ91yZ90LqnpRWawMERF5EzOEVyzzMFpO1LB2FUYU7YqiTWDtKoQo2gTh2LVEVefn2ylfo9Kqqj1Z\ntn1eVf9xBgbOSkTkUQ0iVpUZa1dhRNGuKNoE1q5CiKJNUF678mkqGRsUZ9vbrkGxWCwWS24q6fxo\nsVgslqMM26gUzi2VNiAL1q7CiKJdUbQJrF2FEEWboIx2hRKl2GKxWCwWsD0Vi8VisYSIbVR8iMg5\nIvKMiOxxIh+nbxcR+Y6z/XEROSlo2RLb9SeOPU+IyC9EpMO3rdtZv1NEHi2jTStFpM85704R2RC0\nbInt+orPpt0iMiEibjDTUl2rW0XkDRHJ6KBbwXqVz66y16uAdpW9bgWwqez1yjn2cSLyoIg8JSJP\nisiVGfYpb/0K4nb/dvgAcWAvsAwTqHIX8J60fc4F7sME0PxvwK+Cli2xXacDzc7yx127nO/dwLwK\nXKuVwD3FlC2lXWn7nw/8vJTXyjnuCuAksoQSqkS9CmhXWetVAXZVom7ltKkS9co59iLgJGe5AXi2\n0s8t21OZ4jRgj6ruU9VR4E5MzDE/FwBb1PBLICUmXEyQsiWzS1V/oapuOuVfAq0hnbtom0pUNuxj\nHxH+pxSo6g4y5wtyqUS9ymtXBepVILtyULLrVaBNZalXAKr6qqo+5iz3A08Dx6btVtb6ZRuVKY4F\nXvJ97+HIm5NtnyBlS2mXn89h3kpcFHhARH4jJlpzOW063elu3yciJxRYtpR2ISK1mNBD23yrS3Gt\nglCJelUo5ahXhVDuuhWIStYrEWkD/gD4VdqmstavsDI/WiKAiJyB+ef/kG/1h1T1ZRH5PeDfReR3\nzltXqXkMWKyqh0XkXOBfgXeW4bxBOR/4T1X1v31W6lpFmojVK4h23apIvRKRekxD9t9V9VCYxy4U\n21OZ4mXgON/3VmddkH2ClC2lXYjI+zDRpC9Q1f3uelV92fn7BnA3pstbcptU9ZCqHnaW7wWqRGRe\n0N9TKrvoJMUxAAABdklEQVR8XEjaEEWJrlUQKlGvAlHmehWICtWtoJS9XolIFaZB+Z6qpgfehXLX\nr1KIR7Pxg+m17QOWMiVanZC2z3lMF7weCVq2xHYtBvYAp6etrwMafMu/AM4pk00LmfKDOg2TnVMq\nfa2c/Zow4+N1pb5WvuO3kV14Lnu9CmhXWetVAXaVvW7ls6mC9UqALZigv9n2KWv9ssNfDqo6LiJf\nBn6KmRVxq6o+KSKXO9tvBu7FzKTYAwxiUgJkLVtGuzYALcBNYrI8jqsJHrcAuNtZlwD+WVV/Uiab\nPgV8UUTGMamfL1RTkyt9rcDk37lfVQd8xUtyrQBE5PuYGUvzRKQHuBao8tlU9noV0K6y1qsC7Cp7\n3QpgE5S5Xjl8EPgM8ISI7HTW/SXmhaAi9ct61FssFoslNKymYrFYLJbQsI2KxWKxWELDNioWi8Vi\nCQ3bqFgsFoslNGyjYrFYLJbQsI2KxWKxWELDNioWi8ViCQ3bqFgsFoslNP4/fRFm8bUM2KsAAAAA\nSUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fc021b14860>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\nAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fc0217af710>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x7fc021797c88>"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "###########################################################################\n",
    "############### Getting a noisy signal and label it #########################\n",
    "###########################################################################\n",
    "\n",
    "# Generate noisy signal:\n",
    "f_prime = np.random.randn(N,1)\n",
    "error = L.dot(f_prime)\n",
    "X_noisy = X + error\n",
    "\n",
    "# Label the original and new signal\n",
    "Y = np.sign(np.diff(X,n=1,axis = 0))\n",
    "Y_noisy = np.sign(np.diff(X_noisy,n=1,axis = 0))\n",
    "\n",
    "gl.set_subplots(4,1)\n",
    "# Plot the original signal and its labelling ! \n",
    "ax1 = gl.scatter(tgrid,X, lw = 1, alpha = 0.9, color = \"k\", nf = 1,\n",
    "                 labels = [\"Original signal\",\"\",\"X(t)\"])\n",
    "gl.plot(tgrid,X, lw = 2, color = \"k\", ls = \"--\")\n",
    "gl.stem(tgrid[1:,0], Y, sharex = ax1, nf = 1, labels = [\"\", \"t\",\"Y(t)\"])\n",
    "\n",
    "# Plot noisy part\n",
    "gl.scatter(tgrid,X_noisy, lw = 1, alpha = 0.9, color = \"k\", nf = 1,\n",
    "                 labels = [\"Noisy signal\",\"\",\"X_noise(t)\"])\n",
    "gl.plot(tgrid,X_noisy, lw = 2, color = \"k\", ls = \"--\")\n",
    "gl.stem(tgrid[1:,0], Y_noisy, sharex = ax1, nf = 1, labels = [\"\", \"t\",\"Y_noise(t)\"])"
   ]
  },
  {
   "cell_type": "code",
<<<<<<< HEAD
   "execution_count": 31,
   "metadata": {
    "collapsed": false
   },
=======
   "execution_count": 8,
   "metadata": {},
>>>>>>> 3f4c287f35bd60b69f4fac644daa30e5913c543b
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Creating file: ./artificial_data/X_values0.pkl\n",
      "Creating file: ./artificial_data/X_values1.pkl\n",
      "Creating file: ./artificial_data/X_values2.pkl\n",
      "Creating file: ./artificial_data/X_values3.pkl\n",
      "Creating file: ./artificial_data/X_values4.pkl\n",
      "Creating file: ./artificial_data/X_values5.pkl\n",
      "Creating file: ./artificial_data/X_values6.pkl\n",
      "Creating file: ./artificial_data/X_values7.pkl\n",
      "Creating file: ./artificial_data/X_values8.pkl\n",
      "Creating file: ./artificial_data/X_values9.pkl\n",
      "Creating file: ./artificial_data/Y_values0.pkl\n",
      "Creating file: ./artificial_data/Y_values1.pkl\n",
      "Creating file: ./artificial_data/Y_values2.pkl\n",
      "Creating file: ./artificial_data/Y_values3.pkl\n",
      "Creating file: ./artificial_data/Y_values4.pkl\n",
      "Creating file: ./artificial_data/Y_values5.pkl\n",
      "Creating file: ./artificial_data/Y_values6.pkl\n",
      "Creating file: ./artificial_data/Y_values7.pkl\n",
      "Creating file: ./artificial_data/Y_values8.pkl\n",
      "Creating file: ./artificial_data/Y_values9.pkl\n"
     ]
    }
   ],
   "source": [
    "###########################################################################\n",
    "############### GENERATE THE DATA TO SAVE TO DISK !! #########################\n",
    "###########################################################################\n",
    "\n",
    "Nchains = 300           # Number of chains to generate !\n",
    "Lenght_chains = 50      # Length of the correlated chains\n",
    "\n",
    "Lenght_chains = Lenght_chains +1 # Since the first sample is not useful because we cannot compute its increase.\n",
    "# Compute the kernel and the realizations\n",
    "N = Lenght_chains\n",
    "X_list = []\n",
    "Y_list = []\n",
    "\n",
    "for i in range(Nchains):\n",
    "    # Generate the chain\n",
    "    t0 = 0          # Initial time         \n",
    "    delta_t = 0.02   # Period of sampling\n",
    "    tf = t0 + Lenght_chains*delta_t         # Final time\n",
    "    # Create the t- values\n",
    "    tgrid = np.linspace(t0,tf, Lenght_chains)\n",
    "    tgrid = tgrid.reshape(tgrid.size,1)\n",
    "    N = tgrid.size\n",
    "    \n",
    "    # Create the signal \n",
    "    X = mean_function(tgrid, f1 = 1, f2 = 5, a1 = 0.4, a2 = 0.1, \n",
    "                          phi2 = 2*np.pi/7, m = 0.1 )\n",
    "\n",
    "    # Generate the noise\n",
    "    K = get_Kernel(tgrid, kernel_type = \"1\", l = 0.01, sigma_noise = 1)\n",
    "    L = np.linalg.cholesky(K+1e-10*np.eye(N))\n",
    "    f_prime = np.random.randn(N,1)\n",
    "    error = L.dot(f_prime)\n",
    "    \n",
    "    X_noisy = X + error\n",
    "    # Label the original and new signal\n",
    "    Y = np.sign(np.diff(X,n=1,axis = 0))\n",
    "    Y_noisy = np.sign(np.diff(X_noisy,n=1,axis = 0))\n",
    "\n",
    "    X_list.append(X_noisy[1:,[0]])\n",
    "    Y_list.append(Y_noisy[1:,[0]])\n",
    "\n",
    "\n",
    "########## Using Pickle ###############\n",
    "\n",
    "Ndivisions = 10;\n",
    "folder_data = \"./artificial_data/\"\n",
    "ul.create_folder_if_needed(folder_data)\n",
    "    \n",
    "\n",
    "# Cannot use it due to incompatibilities Python 2 and 3\n",
    "pkl.store_pickle(folder_data +\"X_values.pkl\",X_list,Ndivisions)\n",
    "pkl.store_pickle(folder_data +\"Y_values.pkl\",Y_list,Ndivisions)\n",
    "\n",
    "## Test to load the files back \n",
    "X_list2 = pkl.load_pickle(folder_data +\"X_values.pkl\",Ndivisions)\n",
    "Y_list2 = pkl.load_pickle(folder_data +\"Y_values.pkl\",Ndivisions)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python [default]",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
